﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FA.Library.Util;
using System.ComponentModel;

namespace FA.Library.Sim.Aircraft
{
    public interface AircraftControls : ICloneable, INotifyPropertyChanged
    {
        /// <summary>
        /// True if landing gear handle is applied.
        /// </summary>
        bool LandingGearApplied { get; set; }

        /// <summary>
        /// Percent aileron input left/right.
        /// 
        /// (-16K to 0) -16K = full left 
        /// </summary>
        float AileronPosition { get; set; }

        /// <summary>
        /// Percent deflection of aileron trim.
        /// </summary>
        float AileronTrim { get; set; }

        /// <summary>
        /// Percent elevator input deflection.
        /// 
        /// (-16K to 0) -16K = full down.
        /// </summary>
        float ElevatorPosition { get; set; }

        /// <summary>
        /// Elevator trim deflection.
        /// </summary>
        float ElevatorTrim { get; set; }

        /// <summary>
        /// Percent rudder input deflection.
        /// 
        /// (-16K to 0) -16K = full left 
        /// </summary>
        float RudderPosition { get; set; }

        /// <summary>
        /// Percent deflection of rudder trim.
        /// </summary>
        float RudderTrim { get; set; }

        /// <summary>
        /// Percent control deflection fore/aft (for animation).
        /// 
        /// (-16K to 0) -16K = Yoke fully pushed in
        /// </summary>
        float YokeYPosition { get; set; }

        /// <summary>
        /// Percent control deflection left/right (for animation).
        /// </summary>
        float YokeXPosition { get; set; }

        /// <summary>
        /// Index of current flap position.
        /// </summary>
        int FlapIndex { get; set; }

        /// <summary>
        /// Percent left trailing edge flap extended.
        /// </summary>
        float LeftTrailingEdgeFlap { get; set; }

        /// <summary>
        /// Percent right trailing edge flap extended.
        /// </summary>
        float RightTrailingEdgeFlap { get; set; }

        /// <summary>
        /// Percent left leading edge flap extended.
        /// </summary>
        float LeftLeadingEdgeFlap { get; set; }

        /// <summary>
        /// Percent right leading edge flap extended.
        /// </summary>
        float RightLeadingEdgeFlap { get; set; }

        /// <summary>
        /// Percent rudder pedal deflection (for animation).
        /// 
        /// (-16K to 0) -16K = left pedal pushed full in
        /// </summary>
        float RudderPedalPosition { get; set; }

        /// <summary>
        /// Percent left brake.
        /// 
        /// (0 to 32K) 0 = off, 32K full.
        /// </summary>
        float BrakeLeftPosition { get; set; }

        /// <summary>
        /// Percent right brake.
        /// 
        /// (0 to 32K) 0 = off, 32K full.
        /// </summary>
        float BrakeRightPosition { get; set; }

        /// <summary>
        /// Parking brake on.
        /// 
        /// (0 to 32K) 0 = off, 32K full
        /// </summary>
        float BrakeParkingPosition { get; set; }

        /// <summary>
        /// Parking brake indicator.
        /// </summary>
        bool BrakeParkingIndicator { get; }

        /// <summary>
        /// Spoiler handle position.
        /// 
        /// Position (16K = down, 0 = up) 
        /// </summary>
        float SpoilerHandlePosition { get; set; }
    }
}
